﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace Gerencial_Fisio_Nutry.Tela
{
    public partial class NotaInterna : Form
    {
        public NotaInterna()
        {
            InitializeComponent();
            carregarLista();
            conjunto = new Gerencial_Fisio_Nutry.NotaInterna.Conjunto();
        }
        public void carregarLista()
        {
            dgVProduto.DataSource = new Banco.MetodoBanco().todosProdutos2();


            dgVProduto.Columns[0].HeaderText = "Codigo";
            dgVProduto.Columns[1].HeaderText = "Referencia";
            dgVProduto.Columns[2].HeaderText = "Descrição";
            dgVProduto.Columns[3].HeaderText = "Preço";
            dgVProduto.Columns[0].Width = 75;
            dgVProduto.Columns[1].Width = 85;
            dgVProduto.Columns[2].Width = 240;
            dgVProduto.Columns[3].Width = 80;

        }
        int cod_produto= 0;
        Gerencial_Fisio_Nutry.NotaInterna.Conjunto conjunto;
        Gerencial_Fisio_Nutry.NotaInterna.Conjunto.itemInterno item;
        private void dgVProduto_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                cod_produto = (int.Parse(dgVProduto.Rows[e.RowIndex].Cells[0].Value.ToString()));
                feito(new Banco.MetodoBanco().estoqueDoItem2(cod_produto));
            }
            catch
            {
                cod_produto = 0;
            }
        }
        public void feito(Logica.Estoque[] estoque)
        {
            dgvItens.Rows.Clear();
            for (int i = 0; i < estoque.Length; i++)
            {

                //e.nnf,p.cod_produto, p.referencia, p.descricao, p.descontoLimite,e.valorCompra, e.quantidadeNota, e.dataValidade
                // e.cod_entrada, e.nnf,e.cod_produto, e.valorCompra, e.quantidadeEstoque, e.dataValidade
                string[] linha = {"false",estoque[i].nnf.ToString("00000") ,estoque[i].cod_produto.ToString("00000"),estoque[i].valorCompra.ToString("0.00").Replace('.',','),
                                   estoque[i].quantidade.ToString("0000"),estoque[i].dataValidade.ToString(),"0"};


                dgvItens.Rows.Add(linha);
            }
        }
        public void inserirFeito(int cod_produto )
        {
            double qtd = 0;
            for (int i = 0; i <dgvItens.RowCount; i++)
            {
                try
                {
                    string info = dgvItens.Rows[i].Cells[6].Value.ToString();
                    qtd += double.Parse(info);
                }
                catch { }
            }
            string[] linha = {cod_produto.ToString("00000"),qtd.ToString()}; dgvItem.Rows.Add(linha);
        }

        private void btEstoque_Click(object sender, EventArgs e)
        {
             item = new Gerencial_Fisio_Nutry.NotaInterna.Conjunto.itemInterno();
            Logica.Produto prod = new Logica.Produto();
            prod = new Banco.MetodoBanco().carregarProdutoByCodigo(cod_produto);

            item.CFOP = prod.CFOP;
            item.cod_produto = cod_produto;
            item.descontoLimite = prod.descontoLimite;
            item.descricao = prod.descricao;
            item.NCM = prod.NCM;
            item.precoSaida = prod.precoSaida;
            item.referencia = prod.referencia;
            item.segmento = new Banco.MetodoBanco().carregaSegmento(cod_produto);
            item.unidade = prod.unidade;
            double qtd = 0;

            foreach (DataGridViewRow dv in dgvItens.Rows)
            {
                if (Convert.ToBoolean(dv.Cells[0].Value) && !dv.Cells[6].Value.ToString().Equals("0")
                    && double.Parse(dv.Cells[4].Value.ToString()) >= double.Parse(dv.Cells[6].Value.ToString()))
                {
                    string info = dv.Cells[6].Value.ToString();
                    qtd += double.Parse(info);
                    item.notas.Add(new Banco.MetodoBanco().getEntradaNota(
                                             new Banco.MetodoBanco().codigoEntradaProdutoByNnfAndProduto
                         (cod_produto, int.Parse(dv.Cells[1].Value.ToString())), double.Parse(info)));
                }
            }
            dgvItem.Rows.Add(new string[] { cod_produto.ToString("00000"), qtd.ToString() });
            item.quantidade = qtd;
            conjunto.itensInterno.Add(item);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Gerencial_Fisio_Nutry.NotaInterna.MetodoInterno met = new Gerencial_Fisio_Nutry.NotaInterna.MetodoInterno();
          XmlDocument doc=  met.gerarXmlInterno(conjunto);

            //agora só falta dar baixa do estoque.
            foreach(Gerencial_Fisio_Nutry.NotaInterna.Conjunto.itemInterno it in conjunto.itensInterno ){
            foreach (Gerencial_Fisio_Nutry.NotaInterna.Conjunto.itemInterno.NotaInterna nots in it.notas){
                new Banco.MetodoBanco().baixaEstoqueNotaInterna(it.cod_produto, nots.nnf, nots.quantidadeNota);
            }
            
            }
            
        }

    }
}
